Модули

Паскаль обеспечивает доступ к большому числу встроенных констант, типов данных, переменных, процедур и функций. Их количество велико, однако, в своей программе мы редко используете их все сразу. Поэтому они разделены на связанные группы, называемые модулями. В этом случае Вы можете использовать только те модули, которые необходимы в программе.

Модуль представляет собой набор констант, типов данных, переменных, процедур и функций. Каждый модуль аналогичен отдельной программе на Паскале: он может иметь основное тело, которое вызывается перед запуском Вашей программы и осуществляет необходимую инициализацию. Таким образом, модуль представляет собой библиотеку описаний, которую можно вставить в свою программу и которая позволит разбить программу на части, компилируемые отдельно.

Структура модуля

Модуль обеспечивает набор средств благодаря процедурам и функциям при поддержке констант, типов данных и переменных, однако действительная реализация этих средств скрыта в силу того, что модуль разделен на две секции: интерфейса и реализации. Если программа использует модуль, то все описания модуля становятся доступными этой программе, как если бы они были определены в ней самой.

Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:

unit идентификатор;

interface

uses список модулей; {Необязательный}

implementation {открытые описания}

begin {закрытые описания процедуры и функции }

end.{код инициализации }

Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор) аналогично, как и в случае имени программы.

Следующим элементом в модуле является ключевое слово interface. Обозначает начало секции интерфейса модуля — секции, видимой всем другим модулям или программам, в которых модуль используется.

Модуль может подключать другие модули, для этого они определяются в предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface.

Отметим, что здесь выполняется общее правило использования предложения uses: если модуль, имя которого указано в предложении uses, использует другие модули, то имена этих модулей также должны быть указаны в предложении uses, причем до того, как они будут использованы.

Стандартные модули Turbo Pascal

CRTобеспечивает набор специфичных для РС описаний констант, переменных и программ для операций ввода/вывода. Последние можно использовать для работы с экраном (задание окон, непосредственное управление курсором, цвет текста и фона). Кроме того, Вы можете осуществлять «необработанный» ввод с клавиатуры и управлять платой генерации звукового сигнала персонального компьютера. Этот модуль обеспечивает множество подпрограмм, которые были стандартными в версии 3.0
PrinterИспользуемые пакеты: Crt
В модуле Printer дано описание переменной текстового файла Lst, которая связывается с драйвером устройства, позволяющим направлять стандартный для Паскаля вывод на печатающее устройство с помощью Write и Writeln. Например, включив Printer в свою программу, Вы можете сделать следующее:
Write(Lst,’Сумма ‘,A:4,’ и ‘,B:4,’ равна ‘);
C:=A + B;
Writeln(Lst,C:8);
OverlayOverlay — содержит инструменты для создания оверлейных программ. Программа OVERKAY — программа, которая загружается не вся , а по частям.
GraphИспользуемые пакеты: Crt
Graph обеспечивает набор быстродействующих, эффективных графических подпрограмм, которые позволяют использовать в полной мере графические возможности Вашего персонального компьютера.
Этот модуль реализует независимый от устройства графический драйвер фирмы «Борланд», позволяющий поддерживать графические адаптеры типа СGА, ЕGА, Hercules, АТТ 400, МСGА, 3270 РС и VGА.
Turbo3Используемые пакеты: Crt
Этот модуль содержит две переменные и несколько процедур, которые больше не поддерживаются Турбо-Паскалем. Они включают встроенную файловую переменную Кbd, булеву переменную CBreak и первоначальные целочисленные версии MemAvail и MaxAvail (которые возвращают размер свободной памяти в параграфах, а не в байтах, как это делают настоящие версии).
Graph3Используемые пакеты: Crt
Graph3 поддерживает полный набор графических подпрограмм для версии 3.0 — для обычной, расширенной графики и графики, использующей относительные команды. Они идентичны по имени, параметрами функции подпрограммам версии 3.0.
DosDOS определяет многочисленные паскалевские процедуры и функции, которые эквивалентны наиболее часто используемым вызовам DOS, как например, GetТime, SetТime, DiskSize и так далее. Кроме того, он определяет две программы низкого уровня МsDos и Intr, которые позволяют активизировать любой вызов MS-DOS или системное прерывание. Registers представляет собой тип данных для параметра в МsDos и Intr. Кроме того, определяются некоторые другие константы и типы данных.
SystemSystem содержит все стандартные и встроенные процедуры и функции Турбо-Паскаля. Любая подпрограмма Турбо-Паскаля, не являющаяся частью стандартного Паскаля и не находящаяся ни в каком другом модуле, содержится в System. Этот модуль присоединяется ко всем программам.
TurboФайл TURBO.TPL содержит все стандартные пакеты, кроме Graph и пакетов совместимости (Graph3 и Turbo3): System, Overlay, Crt, Dos и Printer. Эти пакеты загружаются в память вместе с Турбо-Паскалем и всегда вам доступны. Обычно файл TURBO.TPL хранят в одном каталоге с TURBO.EXE (или TPC.EXE). Вы можете хранить его и в другом каталоге, если он описан как каталог Турбо-Паскаля. Для этого необходимо с помощью TINST.EXE установить этот каталог в файле TURBO.EXE.

Стандартные модули Free Pascal

CRTПодпрограммы для работы с вводом-выводом в текстовом режиме
DateUtilsПодпрограммы для работы с датой и временем
DosПодпрограммы для работы с функциями DOS
GraphПодпрограммы для работы в графическом режиме
KeyBoardПодпрограммы для работы с клавиатурой
MathМатематические функции
MouseПодпрограммы для работы с мышью
PrinterПодпрограммы для работы с принтером
StringsПодпрограммы для работы со строками
StrUtilsПодпрограммы для работы со строками
SystemОсновные подпрограммы общего назначения. Этот модуль не нужно подключать к вашей программе, так как он подключается автоматически.
SysUtilsДополнительные подпрограммы общего назначения.
VideoПодпрограммы для работы с экраном в текстовом режиме
WinCRTПодпрограммы ввода-вывода
x86Работа с портами ввода-вывода

Написание собственных модулей Turbo Pascal

Предположим мы написали модуль IntLib, записали его в файл с именем Int.pas и оттранслировали на диск; получившийся в результате код находится в файле INTLIВ.ТРU. Для использования этого модуля в программе необходимо включить в нее оператор uses, указывающий компилятору, какой модуль используется. Наша программа может выглядеть следующим образом:

program MyProg;
uses IntLib;

Отметим, что Паскаль предполагает, что файл, в котором находится модуль, имеет такое же имя, что и сам модуль. Если имя Вашего модуля МyUtilities, то Паскаль будет искать файл с именем МYUTILIТ.PAS.

Компиляция модуля в Turbo Pascal

Модуль компилируется точно так же, как компилируется программа: он создается с помощью редактора, а затем вызывается команда Соmpile/Соmpile (Компилировать/ Компилировать) (или нажимаются клавиши Аlt-С). Однако, вместо файла с расширением .ЕХЕ Турбо-Паскаль создает файл с расширением .ТРU (Turbо Раscal Unit — модуль Турбо-Паскаля). После этого Вы можете оставить этот файл как есть или же вставить его в ТURВО.TPL с помощью TPUMOVER.ЕХЕ.

В любом случае имеет смысл переслать файлы с расширением *.ТРU (вместе с исходными файлами) в каталог модулей, который определен с помощью команды О/D/Unit directories (Каталоги модулей). В одном исходном файле может находиться только один модуль, поскольку компиляция прекращается, как только обнаружен завершающий оператор end.

Пример:

Напишем небольшой модуль. Назовем его IntLib и вставим в него две простые подпрограммы для целых чисел — процедуру и функцию:

unit IntLib;

interface

procedure ISwap(var I,J: integer);

function IMax(I,J: integer): integer;

implementation

procedure ISwap;

var

Temp: integer;

begin

Temp:=I;

I:=J;

J:=Temp

end; {конец процедуры ISwap }

function IMax;

begin

if I > J then IMax:=I else IMax:=J

end; {конец функции IMax }

end. {конец модуля IntLib }

Введем эту подпрограмму, запишем ее в файл INTLIВ.PAS, а затем оттранслируем на диск. В результате получим код модуля в файле INTLIВ.ТРU. Перешлем его в каталог модулей. Следующая программа использует модуль IntLib:

program IntTest;

uses IntLib;

var

A,B: integer;

begin

Write('Введите два целочисленных значения: ');

Readln(A,B);

ISwap(A,B);

Writeln('A=',A,' B=',B);

Writeln('Максимальное значение равно ',IMax(A,B));

end. {конец программы IntTest }

Все описания внутри модуля связаны друг с другом. Например, модуль Crt содержит все описания, необходимые для подпрограмм работы с экраном на Вашем персональном компьютере.

Компиляция модуля в Free Pascal

Компиляция модуля выполняется почти также, как и компиляция программы. Отличие заключается только в том, что при компиляции модуля не вызывается компоновщик. Для компиляции модуля, который находится (например) в файле foo.pp, просто напечатайте:

fpc foo

Если всё правильно, то вы получите два файла модуля:

  1. foo.ppu – это файл с описанием откомпилированного вами модуля.
  2. foo.o – это файл, содержащий актуальный код модуля. Этот файл и является конечным продуктом компиляции.

Оба файла необходимы, если вы планируете использовать модуль в нескольких программах. Если вам нужен модуль для распространения, вы должны предоставлять оба файла – .ppu и .o.